5分钟了解搜索引擎Lucene的原理
场景
假设现在有10W+份word文档,让你做个web页面,给出关键词能快速搜索结果,你会怎么做?那至少有3种方案,
- 顺序扫描,每次检测文档中是否包含关键词,包含则加入结果列表,不包含继续查找下一个,直到找完为止。
- 将文档内容导入数据库,用SQL的
like
关键词搜索。 - 用Lucene做全文检索。
你会选哪种?首先顺序扫描在数据量大的时候太慢,数据量比较少的话可行;导入数据库数据量太大用like
会引起全表扫描也会很慢,那当然是第三种,因为搜索引擎Lucene就是专门为这种场景设计的:大量的,分结构化数据的快速搜索
看看官网怎么对Lucene的介绍
可扩展,高性能的索引过程
- 在现代化的硬件上面索引超过150G/小时
- 只需要1M的堆
- 增量索引和批量索引一样快
- 索引大小大约是文本索引大小的20-30%
强大,准确和高效的搜索算法
- 排名搜索——最好的结果优先返回
- 许多强大的查询类型:短语查询,通配符查询,接近查询,范围查询等
- 针对不同的域搜索(例如标题、作者、内容)
- 对任何域进行排序
- 具有合并结果的多索引搜索
- 允许同步更新和搜索
- 插拔式的排名模型, 包括 Vector Space Model 和 Okapi BM25
- 可配置的存储引擎
全文检索原理
全文检索原理很简单,就拿新华字典做比喻,假设字典没有索引页,你要找一个字的解释你就得一页一页翻,直到找到为止,这效率可想而知
现在有了索引页,就可以根据拼音首字母或偏旁部首快速定位到目标字在哪一页,这个索引页,就是全文检索核心。
简而言之:在非结构化数据中,将一部分结构化信息抽取出来,重新组织,然后针对这部分有结构的数据进行索引建立,从而达到加速查询的目的。那么
-
索引存啥?怎么存?(对应字典的索引页部分)
-
数据怎么存